package com.mp.negocio;

import com.mp.dao.SessaoUsuarioDAO;
import com.mp.db.jpa.modelo.SessaoUsuario;
import com.mp.db.jpa.modelo.Usuario;
import java.util.Date;

public class SessaoUsuarioService 
{
    
    private SessaoUsuarioDAO suDAO  = new SessaoUsuarioDAO();
    private UsuarioService usuarioService = new UsuarioService();
    
    
    public SessaoUsuario obterSessaoUsuario(int usr) throws Exception
    {
        
       SessaoUsuario sessaoUsuario = suDAO.obterSessaoUsuario(usr);
             
       if( sessaoUsuario == null)
       {
           throw new Exception("Sessao nao encontrada para id passado.");
       }
       else
       {
            return sessaoUsuario;
       }
        
    }
     
     public SessaoUsuario obterSessaoUsuarioPeloUltimoId(int usr) throws Exception
    {
        
       SessaoUsuario sessaoUsuario = suDAO.obterSessaoUsuarioPorUltimoId(usr);
             
       if( sessaoUsuario == null)
       {
           throw new Exception("Sessao nao encontrada para id de usuario passado.");
       }
       else
       {
            return sessaoUsuario;
       }
        
    }
    
     
    public SessaoUsuario autenticarUsuario(String login, String senha) throws Exception
    {
        
        Usuario usrBanco = usuarioService.obterUsuarioPorLogin(login);
        
        if(usrBanco == null)
        {
            throw new Exception("Usuário não encontrado.");
        }
      
        if(!usrBanco.getSenha().equals(senha))
        {
           throw new Exception("Usuário/senha incorretos.");       
        }
             
        gravarSessaoUsuario(usrBanco);
        //Retorna a ultima criada ou a recem atualizada pela data
        return obterSessaoUsuarioPeloUltimoId(usrBanco.getIdUsuario());
       
    }  
    
    
     public void logOut(Integer idSessao) throws Exception
    {
        
        SessaoUsuario ssUsuario = suDAO.obterSessaoUsuario(idSessao); 
        
        if(ssUsuario == null)
        {
            throw new Exception("Sessão não encontrada.");
        }
                    
        ssUsuario.setFlagAtiva("N");
        suDAO.updateSessaoUsuario(ssUsuario);
       
    }  
     
     
     
     
     
    public void gravarSessaoUsuario(Usuario usr)
    {
        //Obtendo a sessao do usuário com a data mais proxima.
        SessaoUsuario sessaoAtual = suDAO.obterSessaoUsuarioPorLogin(usr.getLogin());
                          
        if(sessaoAtual == null)
        {
            SessaoUsuario su = new SessaoUsuario();
            su.setUsuario(usr);  
            su.setFlagAtiva("S");
            suDAO.gravarSessaoUsuario(su);
        }
        else
        {
            if(sessaoAtual.getDataSessaoLimite().getTime() <= (new Date()).getTime())
            {
                sessaoAtual.setDataSessao((new Date()));
                suDAO.updateSessaoUsuario(sessaoAtual);
            }
        }
       
    }
    
    
   
    
}
